﻿#define _CRT_SECURE_NO_WARNINGS 1
给你两个二进制字符串，返回它们的和（用二进制表示）。

输入为 非空 字符串且只包含数字 1 和 0。



示例 1:

输入: a = "11", b = "1"
输出 : "100"
示例 2 :

	输入 : a = "1010", b = "1011"
	输出 : "10101"


	提示：

	每个字符串仅由字符 '0' 或 '1' 组成。
	1 <= a.length, b.length <= 10 ^ 4
	字符串如果不是 "0" ，就都不含前导零。

	来源：力扣（LeetCode）
	链接：https ://leetcode.cn/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
char* addBinary(char* a, char* b) {
	int p = 0;//length为字符串c的长度,p来判断是否进位
	int length = (strlen(a) > strlen(b) ? strlen(a) + 2 : strlen(b) + 2);//+2是因为还要放'/0
	char* c = (char*)malloc(sizeof(char) * length);
	c[length - 1] = '\0';
	for (int i = strlen(a) - 1, j = strlen(b) - 1, k = length - 2; (i >= 0) || (j >= 0); i--, j--, k--)
	{
		int sum = p;
		sum += (i >= 0 ? a[i] - '0' : 0);//用？语句来解决小数高位不存在问题
		sum += (j >= 0 ? b[j] - '0' : 0);

		p = sum / 2;
		c[k] = '0' + sum % 2;
	}
	c[0] = p + '0';
	if (p == 0)//首位为零，所有数向前移一位
	{
		for (int i = 0; i < length - 1; i++)
			c[i] = c[i + 1];
	}
	return c;
}



